#include <WordDataReader.hpp>
#include <cstdio>
#include <Trie.hpp>
#include <iostream>
#include <set>

WordDataReader::WordDataReader(std::string filename)
: filename(filename) {

}

Trie* WordDataReader::readData(bool insensitive) {

	FILE * file = fopen(filename.c_str(), "r");
	
	//palavras nao podem ter mais do que 1023 letras
	char buffer[1024];

	std::string str;

	Trie * trie = new Trie();
	

	while (fscanf(file, "%1023[A-Za-z]", buffer) != EOF) {
		// Converte para letras minusculas, caso insensitive
		if (insensitive) {
			for (int i = 0; buffer[i]; i++) {
				if (buffer[i] >= 'A' && buffer[i] <= 'Z') {
					buffer[i] = (buffer[i] - 'A') + 'a';
				}
			}
		}
		// Joga o conteudo do buffer em uma string
		str = buffer;
		// Insere na trie
		trie->insert(str);
		// Pula lixo ate a proxima palavra
		fscanf(file, "%*[^A-Za-z]");
	}

	fclose(file);
	// fclose(cleanText);

	return trie;
}
